package collection;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

/**
 * @author PC
 * @date 2020/5/15
 */
public class IteratorTest {
    public static void main(String[] args) {
        /*
        * Collection类及其子类实现了Iterator接口，因此，Collection类及其子类可以调用iterator方法获取迭代器，对集合元素进行迭代。
        * 从另一个方面比较，增强for循环遍历的效率要高于迭代器遍历
        * 常用方法主要有：
        *       boolean hasNext()
        *       Object next()
        *       void remove()
        *       void forEachRemaining(Consumer<? super E> action)
        *
        * 在使用迭代器遍历集合元素时，只能通过迭代器删除元素，集合需保证迭代器前后保持一致，迭代器就相当于集合的快照，迭代器在删除集合元素时，会
        * 将集合中对应的元素删除。remove()默认删除前一次获取的元素，即remove()方法一定要和next()方法一起使用
        * */
        ArrayList<Integer> c = new ArrayList<>();
        c.add(1);
        c.add(10);
        c.add(100);

        ListIterator<Integer> listIterator = c.listIterator();

        while (listIterator.hasNext()){
            int i = listIterator.next();
            if(i == 100){
                listIterator.add(1000);
            }

        }
        //前向遍历
        while (listIterator.hasPrevious()){
            System.out.println(listIterator.previous());
        }
        System.out.println(c);
        Iterator<Integer> iterators = c.iterator();
        while (iterators.hasNext()){
            System.out.println(iterators.next());
            iterators.remove();
        }
        iterators.forEachRemaining(ele-> System.out.println(ele));
    }
}
